/* 哥德巴赫猜想：任意一个大于2的偶数，都可以表示成两个素数之和
验证：2000以内大于2的偶数都能够分解为两个素数之和 */
#include <iostream>
#include <math.h>

using namespace std;

int prime(int n);              // 判断是否均为素数
int prime2(int flag[], int i); // 判断是否均为素数
int main()
{
    int flag[2001];
    for (int index = 1; index <= 2000; index++)
    {
        flag[index] = prime(index); // 填充默认值，为合数
    }
    int i, n;
    for (i = 4; i <= 2000; i+=2)
    {
        for (n = 2; n < i; n++)
        {
            if (prime2(flag, n))
                if (prime2(flag, i - n))
                {
                    cout << i << "=" << n << "+" << i - n << endl;
                    break;
                }
            if (n == i)
                cout << "error" << endl;
        }
    }
}

int prime(int i)
{
    int j;
    if (i <= 1)
        return 0;
    if (i == 2)
        return 1;
    for (j = 2; j <= (int)(sqrt((double)i)); j++)
        if (!(i % j))
            return 0;

    return 1;
}

int prime2(int flag[], int i)
{
    return flag[i];
}